package us.proyecto.canarios.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.Pattern;



/**
 * Clase que mapea la tabla PAJARO
 *
 * @author Juan Antonio Mena Sánchez
 *
 */
@Entity
@Table(name = "PAJARO")
public class Pajaro {

	private int idPajaro;
	private Tipo tipo;
	private String numAnilla;
	private Criador criador;
	private Set<Puntuacion> puntuaciones;
	private boolean enGrupo;
	private String observaciones;
	private Double venta;
	private Boolean vendido;
	private Set<IncidenciaPajaro> incidencias;

	public Pajaro() {
		super();
		tipo = null;
		numAnilla = "";
		criador = null;
		puntuaciones = new HashSet<Puntuacion>();
	}

	/**
	 * Getter de idPajaro
	 * @return the idPajaro
	 */
	@Id
    @SequenceGenerator(name = "pajaroId", sequenceName = "CAN_PAJ_SEQ", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pajaroId")
    @Column(name = "ID_PAJARO", nullable = false, precision = 8, scale = 0)
	public int getIdPajaro() {
		return idPajaro;
	}
	/**
	 * Setter de idPajaro
	 * @param idPajaro the idPajaro to set
	 */
	public void setIdPajaro(int idPajaro) {
		this.idPajaro = idPajaro;
	}

	/**
	 * Getter de tipo
	 * @return tipo Tipo
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	public Tipo getTipo() {
		return tipo;
	}
	/**
	 * Setter de tipo
	 * @param tipo Tipo
	 */
	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}
	/**
	 * Getter de numAnilla
	 * @return numAnilla String
	 */
	@Column(name="NUM_ANILLA", length= 15)
	@Pattern(regex="[a-zA-Z][a-zA-Z]-[0-9][0-9][0-9]-[0-9][0-9]", message="El número de anilla debe tener el formato LL-NNN-NN")
	public String getNumAnilla() {
		return numAnilla;
	}
	/**
	 * Setter de numAnilla
	 * @param numAnilla String
	 */
	public void setNumAnilla(String numAnilla) {
		this.numAnilla = numAnilla;
	}
	/**
	 * Getter de criador
	 * @return criador Criador
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "FK_CRIADOR")
	public Criador getCriador() {
		return criador;
	}
	/**
	 * Setter de criador
	 * @param criador Criador
	 */
	public void setCriador(Criador criador) {
		this.criador = criador;
	}
	/**
	 * @return the puntuaciones
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy ="pajaro", cascade = CascadeType.ALL)
	public Set<Puntuacion> getPuntuaciones() {
		return puntuaciones;
	}
	/**
	 * @param puntuaciones the puntuaciones to set
	 */
	public void setPuntuaciones(Set<Puntuacion> puntuaciones) {
		this.puntuaciones = puntuaciones;
	}

	@Transient
	public boolean isEnGrupo() {
		return enGrupo;
	}

	public void setEnGrupo(boolean enGrupo) {
		this.enGrupo = enGrupo;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy ="pajaro", cascade = CascadeType.ALL)
	public Set<IncidenciaPajaro> getIncidencias() {
		return incidencias;
	}

	public void setIncidencias(Set<IncidenciaPajaro> incidencias) {
		this.incidencias = incidencias;
	}

	@Column(name="OBSERVACIONES", length= 4000)
	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	@Column(name="VENTA", length= 10)
	public Double getVenta() {
		return venta;
	}

	public void setVenta(Double venta) {
		this.venta = venta;
	}

	@Column(name="VENDIDO", length=1)
	public Boolean getVendido() {
		return vendido;
	}

	public void setVendido(Boolean vendido) {
		this.vendido = vendido;
	}




}
